﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CurriculasEntities;
using CurriculasController;
using System.Data;


namespace GestionCurriculos
{
    public partial class frmCurso : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Session["opcion"] = 2;
            if (!Page.IsPostBack)
            {

                //CARGAR COMBOS
                ListarAreaConocimiento();

                //CARGAR GRILLA
                CargarGrilla();
    
                
            }
        }

        private void ListarAreaConocimiento()
        {

            //CARGAR PAISES
            List<AreaConocimientoBE> _lstAreas = new AreaConocimientoBL().ListarTodos().ToList();
            cboAreaConocimiento.DataSource = _lstAreas;
            cboAreaConocimiento.DataTextField = "titulo";
            cboAreaConocimiento.DataValueField = "codAreaConocimiento";
            cboAreaConocimiento.DataBind();
            cboAreaConocimiento.Items.Insert(0, "Seleccionar");

        }

        protected void btnCrear_Click(object sender, EventArgs e)
        {
            Response.Redirect("frmRegCurso.aspx");
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void CargarGrilla()
        {
            int codAreaConocimiento = 0;
            if (cboAreaConocimiento.SelectedValue != "Seleccionar") {
                codAreaConocimiento  = int.Parse(cboAreaConocimiento.SelectedValue); 
            }

            List<ListaCursoBE> _lstCursos = new ListaBL().ListarCursos(txtCurso.Text, codAreaConocimiento).ToList();
            gvCursos.DataSource = _lstCursos.OrderByDescending(p=> p.codCurso);
            gvCursos.DataBind();
        }

        protected void btnModificar_Click(object sender, EventArgs e)
        {
            int contador = 0;
            string codCurso="";
            string strScript = "";
            foreach (GridViewRow row in gvCursos.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (row.Cells[0].FindControl("chkCurso") as CheckBox);
                    if (chkRow.Checked)
                    {
                        codCurso = row.Cells[1].Text;
                        contador += 1;
                        //string country = (row.Cells[2].FindControl("lblCurso") as Label).Text;
                    }
                }
            }

            if (contador == 0) {
                strScript = "alert('No se ha seleccionado un curso a modificar.')";
            }
            else if (contador == 1) {
                List<ListaEstadoCursoBE> _lstEstado = new ListaBL().ListarEstadoCurso(int.Parse(codCurso)).ToList();
                if (_lstEstado.Count == 1)
                {
                    string estado = "";
                        foreach(ListaEstadoCursoBE lstEstado in _lstEstado ){
                            estado = lstEstado.estado; 
                        }

                        if (estado == "1")
                        {
                            Response.Redirect("frmRegCurso.aspx?idCurso=" + codCurso);
                        }
                        else {
                            strScript = "alert('No se puede modificar, debido a que el curso seleccionado esta asociado a un plan curricular con estado diferente a Por Elaborar.')";
                            
                        }
                }
                else {
                    Response.Redirect("frmRegCurso.aspx?idCurso=" + codCurso);
                }
                
            }
            else if (contador > 1) {
                strScript = "alert('Solo se puede modificar un curso.')";
            }


            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", strScript, true);
         
        }

        protected void btnEliminarTrue_Click(object sender, EventArgs e){
        
            int codCurso = int.Parse(hidCodCurso.Value) ;
           
            string strScript = "";
             if (codCurso != 0)
            {
                CursoBL objCursoBL = new CursoBL();
                CursoBE objCursoBE = new CursoBE();

                objCursoBE =  objCursoBL.Obtener(codCurso);
                objCursoBE.estado = "2";

                objCursoBE = objCursoBL.Modificar(objCursoBE);
                CargarGrilla();

                strScript = "alert('Se eliminó el curso con código: " + codCurso + "');";
            }

            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", strScript, true);
        }

        protected void btnEliminar_Click(object sender, EventArgs e)
        {
            int contador = 0; 
            int codCurso = 0;
            string strScript = "";
            foreach (GridViewRow row in gvCursos.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (row.Cells[0].FindControl("chkCurso") as CheckBox);
                    if (chkRow.Checked)
                    {
                        codCurso = int.Parse(row.Cells[1].Text);
                        //string country = (row.Cells[2].FindControl("lblCurso") as Label).Text;
                        contador += 1;
                    }
                }
            }

            if (contador > 1) {
                strScript = "alert('Solo se puede eliminar un curso.')";

            } if (contador == 1) {

                if (codCurso != 0)
                {
                    //int prerequisito = new PrerequisitoBL().ListarTodos().Where(p => p.codCursoHijo == codCurso).ToList().Count();
                    int prerequisito = new PrerequisitoBL().ListarTodos().Where(p => p.codCursoPadre == codCurso).ToList().Count();
                    List<ListaEstadoCursoBE> _lstEstado = new ListaBL().ListarEstadoCurso(codCurso).ToList();

                    if (_lstEstado.Count > 0)
                    {
                        ItinerarioFormativoBE itinerario = new ItinerarioFormativoBL().ListarTodos().Where(p => p.codCurso == codCurso).FirstOrDefault();
                        //Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction2", "alert('El curso no se puede eliminar, debido a que esta asociado a un Plan Curricular.')", true);
                        strScript = "alert('El curso no se puede eliminar, debido a que esta asociado al Plan Curricular con código " + itinerario.codPlanCurricular.ToString() + "')";
                    }
                    else if (prerequisito > 0) {
                        strScript = "alert('El curso no se puede eliminar, debido a que es pre requisito de otros cursos.')";
                    }
                    else
                    {
                        //Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", "ConfirmDelete('" + codCurso + "')", true);
                        strScript = "ConfirmDelete('" + codCurso + "')";

                    }

                }
            }
            else if (contador == 0)
            {

                strScript = "alert('Seleccionar un curso para eliminar.')";
            }

            
            

            Page.ClientScript.RegisterStartupScript(this.GetType(), "CallMyFunction", strScript , true);
        }

       
    }
}